# oniongitshare

Like onionshare, but for git repos.

Distributed githubless repository sharing.

oniongitshare is an attempt to ease the distribution of git repos, away from central points of failure.
It makes it easy to host git repos on a distributed swarm instead of just one central server.

Nodes can come and go, and network topology only depends on the peers entries in the nodes' config files. Changes that are merged by one's peers propagate by diffusion.

Future plans: oniongitshare is meant to evolve into an experimental distributed asynchronous collaboration platform.
This means issue tracking, etc.

Come join the effort! Try it out!

## Usage

Make a new directory and put this in the file ./repo.cfg (when creating a new repository instead of cloning from a peer, the list or indeed the repo.cfg file can remain empty)

```
[network]
peers = <comma-separated list of onion domain names, with or without the suffix .onion>
```

For a public repository, no authentication is needed (option -X). In case authentication is used, prepend the secret as follows: somebody:secret@peeroniondomainname.onion

For each shared repo, Globalist will create one .onion service. Note that it is possible to use either bare repos or not-bare repos.

To initialize a new blank repo and an onion address for it (using the current directory to store the config and repo):

```
oniongitshare -i
```

To clone a bare repo:

```
oniongitshare -c ...
```

To pull once from a bare repo:

```
oniongitshare -p
```

There are various other options and parameters, which you can view:

```
oniongitshare -h
```

For example, this uses `/srv/oniongit/foobar` as base directory, starts its own tor process under `/srv/oniongit/foobar/tor`, communicates with it via the given port, and starts serving:

```
oniongitshare -T /usr/bin/tor -C 9251 -d /srv/oniongit/foobar
```

If you initialize a new oniongitshare instance with `-i` or `-c`, then an onion address will be generated automatically that you can start handing out immediately. This is persistent and will be re-used anytime you serve from the same directory. No need to configure tor manually!

## To install locally

You need the pip3 package `setuptools`, the rest will be downloaded automatically.

```
./setup.py install --user
```

or 

```
torsocks pip3 install -v -e .
```

## To do

Ideas, further work, TODOs:
* also manage issues and PRs in a companion repo
* what about the security of the git daemon?
* make user aware of the importance of signed commits when using software from untrusted sources!
* support overlay networks other than Tor
* support version control systems other than git
* improve UX
* improve things overall
* popularize the approach

